home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK1.toast / Development Kits (Disc 1) / QuickTime / Programming Stuff / QuickTime 2.1 for Developers / Interfaces / CIncludes / MoviesFormat.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-08-07  |  14.9 KB  |  554 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        MoviesFormat.h
  3.  
  4.      Contains:    QuickTime interfaces
  5.  
  6.      Version:    
  7.  
  8.      DRI:        Jim Batson
  9.  
  10.      Copyright:    © 1984-1994 by Apple Computer, Inc.
  11.                  All rights reserved.
  12.  
  13.      Warning:    *** APPLE INTERNAL USE ONLY ***
  14.                  This file may contain unreleased API's
  15.  
  16.      BuildInfo:    Built by:            QuickTime
  17.                  With Interfacer:    1.1d11  
  18.                  From:                MoviesFormat.i
  19.                      Revision:        0
  20.                      Dated:            08/07/95
  21.                      Last change by:    JB
  22.                      Last comment:    This is a fake header used so interfacer is happy.
  23.  
  24.      Bugs:        Report bugs to Radar component “System Interfaces”, “Latest”
  25.                  List the version information (from above) in the Problem Description.
  26.  
  27. */
  28.  
  29. #ifndef __MOVIESFORMAT__
  30. #define __MOVIESFORMAT__
  31.  
  32.  
  33. #ifndef __TYPES__
  34. #include <Types.h>
  35. #endif
  36. /*    #include <ConditionalMacros.h>                                */
  37.  
  38. #ifndef __WINDOWS__
  39. #include <Windows.h>
  40. #endif
  41. /*    #include <Memory.h>                                            */
  42. /*        #include <MixedMode.h>                                    */
  43. /*    #include <Quickdraw.h>                                        */
  44. /*        #include <QuickdrawText.h>                                */
  45. /*    #include <Events.h>                                            */
  46. /*        #include <OSUtils.h>                                    */
  47. /*    #include <Controls.h>                                        */
  48. /*        #include <Menus.h>                                        */
  49.  
  50. #ifndef __IMAGECOMPRESSION__
  51. #include <ImageCompression.h>
  52. #endif
  53. /*    #include <QDOffscreen.h>                                    */
  54. /*        #include <Errors.h>                                        */
  55. /*    #include <Components.h>                                        */
  56. /*    #include <StandardFile.h>                                    */
  57. /*        #include <Dialogs.h>                                    */
  58. /*            #include <TextEdit.h>                                */
  59. /*        #include <Files.h>                                        */
  60.  
  61. #ifndef __MOVIES__
  62. #include <Movies.h>
  63. #endif
  64. /*    #include <Aliases.h>                                        */
  65. /*        #include <AppleTalk.h>                                    */
  66.  
  67. #ifdef __cplusplus
  68. extern "C" {
  69. #endif
  70.  
  71. #if GENERATINGPOWERPC
  72. #pragma options align=mac68k
  73. #endif
  74.  
  75. #ifdef __CFM68K__
  76. #pragma import on
  77. #endif
  78.  
  79.  
  80. enum {
  81.     kMovieVersion                = 0                                /* version number of the format here described */
  82. };
  83.  
  84. struct MoviesUserData {
  85.     long                            size;                        /* size of this user data */
  86.     long                            udType;                        /* type of user data */
  87.     char                            data[1];                    /* the user data */
  88. };
  89. typedef struct MoviesUserData MoviesUserData;
  90.  
  91. struct UserDataAtom {
  92.     long                            size;
  93.     long                            atomType;
  94.     MoviesUserData                    userData[1];
  95. };
  96. typedef struct UserDataAtom UserDataAtom;
  97.  
  98. /****************************************
  99. *
  100. *   MediaDirectory information -
  101. *        The MediaDirectory is tightly coupled to the data.
  102. *
  103. ****************************************/
  104. struct SampleDescriptionAtom {
  105.     long                            size;
  106.     long                            atomType;                    /* = 'stsd' */
  107.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  108.     long                            numEntries;
  109.     SampleDescription                sampleDescTable[1];
  110. };
  111. typedef struct SampleDescriptionAtom SampleDescriptionAtom;
  112.  
  113. /* TimeToSampleNum maps physical sample time to physical sample number. */
  114. struct TimeToSampleNum {
  115.     long                            sampleCount;
  116.     TimeValue                        sampleDuration;
  117. };
  118. typedef struct TimeToSampleNum TimeToSampleNum;
  119.  
  120. struct TimeToSampleNumAtom {
  121.     long                            size;
  122.     long                            atomType;                    /* = 'stts' */
  123.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  124.     long                            numEntries;
  125.     TimeToSampleNum                    timeToSampleNumTable[1];
  126. };
  127. typedef struct TimeToSampleNumAtom TimeToSampleNumAtom;
  128.  
  129. /* SyncSamples is a list of the physical samples which are self contained. */
  130. struct SyncSampleAtom {
  131.     long                            size;
  132.     long                            atomType;                    /* = 'stss' */
  133.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  134.     long                            numEntries;
  135.     long                            syncSampleTable[1];
  136. };
  137. typedef struct SyncSampleAtom SyncSampleAtom;
  138.  
  139. /* SampleToChunk maps physical sample number to chunk number. */
  140. /* same as SampleToChunk, but redundant first sample is removed */
  141. struct SampleToChunk {
  142.     long                            firstChunk;
  143.     long                            samplesPerChunk;
  144.     long                            sampleDescriptionID;
  145. };
  146. typedef struct SampleToChunk SampleToChunk;
  147.  
  148. struct SampleToChunkAtom {
  149.     long                            size;
  150.     long                            atomType;                    /* = 'stsc' */
  151.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  152.     long                            numEntries;
  153.     SampleToChunk                    sampleToChunkTable[1];
  154. };
  155. typedef struct SampleToChunkAtom SampleToChunkAtom;
  156.  
  157. struct ChunkOffsetAtom {
  158.     long                            size;
  159.     long                            atomType;                    /* = 'stco' */
  160.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  161.     long                            numEntries;
  162.     long                            chunkOffsetTable[1];
  163. };
  164. typedef struct ChunkOffsetAtom ChunkOffsetAtom;
  165.  
  166. struct SampleSizeAtom {
  167.     long                            size;
  168.     long                            atomType;                    /* = 'stsz' */
  169.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  170.     long                            sampleSize;
  171.     long                            numEntries;
  172.     long                            sampleSizeTable[1];
  173. };
  174. typedef struct SampleSizeAtom SampleSizeAtom;
  175.  
  176. struct ShadowSync {
  177.     long                            fdSampleNum;
  178.     long                            syncSampleNum;
  179. };
  180. typedef struct ShadowSync ShadowSync;
  181.  
  182. struct ShadowSyncAtom {
  183.     long                            size;
  184.     long                            atomType;                    /* = 'stsz' */
  185.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  186.     long                            numEntries;
  187.     ShadowSync                        shadowSyncTable[1];
  188. };
  189. typedef struct ShadowSyncAtom ShadowSyncAtom;
  190.  
  191. struct SampleTableAtom {
  192.     long                            size;
  193.     long                            atomType;                    /* = 'stbl' */
  194.     SampleDescriptionAtom            sampleDescription;
  195.     TimeToSampleNumAtom                timeToSampleNum;
  196.     SampleToChunkAtom                sampleToChunk;
  197.     SyncSampleAtom                    syncSample;
  198.     SampleSizeAtom                    sampleSize;
  199.     ChunkOffsetAtom                    chunkOffset;
  200.     ShadowSyncAtom                    shadowSync;
  201. };
  202. typedef struct SampleTableAtom SampleTableAtom;
  203.  
  204. struct PublicHandlerInfo {
  205.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  206.     long                            componentType;
  207.     long                            componentSubType;
  208.     long                            componentManufacturer;
  209.     long                            componentFlags;
  210.     long                            componentFlagsMask;
  211.     char                            componentName[1];
  212. };
  213. typedef struct PublicHandlerInfo PublicHandlerInfo;
  214.  
  215. struct HandlerAtom {
  216.     long                            size;
  217.     long                            atomType;                    /* = 'hdlr' */
  218.     PublicHandlerInfo                hInfo;
  219. };
  220. typedef struct HandlerAtom HandlerAtom;
  221.  
  222. /* a data reference is a private structure */
  223. typedef long DataRefAtom;
  224.  
  225. struct DataInfoAtom {
  226.     long                            size;
  227.     long                            atomType;                    /* = 'dinf' */
  228.     DataRefAtom                        dataRef;
  229. };
  230. typedef struct DataInfoAtom DataInfoAtom;
  231.  
  232. struct RgnAtom {
  233.     long                            size;
  234.     long                            atomType;
  235.     short                            rgnSize;
  236.     Rect                            rgnBBox;
  237.     char                            data[1];
  238. };
  239. typedef struct RgnAtom RgnAtom;
  240.  
  241. struct MatteCompressedAtom {
  242.     long                            size;
  243.     long                            atomType;
  244.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  245.     ImageDescription                matteImageDescription;
  246.     char                            matteData[1];
  247. };
  248. typedef struct MatteCompressedAtom MatteCompressedAtom;
  249.  
  250. struct MatteAtom {
  251.     long                            size;
  252.     long                            atomType;
  253.     MatteCompressedAtom                aCompressedMatte;
  254. };
  255. typedef struct MatteAtom MatteAtom;
  256.  
  257. struct ClippingAtom {
  258.     long                            size;
  259.     long                            atomType;
  260.     RgnAtom                            aRgnClip;
  261. };
  262. typedef struct ClippingAtom ClippingAtom;
  263.  
  264. /***********************
  265. * Media Info Example Structures
  266. ***********************/
  267. struct VideoMediaInfoHeader {
  268.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  269.     short                            graphicsMode;                /* for QD - transfer mode */
  270.     short                            opColorRed;                    /* opcolor for transfer mode */
  271.     short                            opColorGreen;
  272.     short                            opColorBlue;
  273. };
  274. typedef struct VideoMediaInfoHeader VideoMediaInfoHeader;
  275.  
  276. struct VideoMediaInfoHeaderAtom {
  277.     long                            size;                        /* size of Media info */
  278.     long                            atomType;                    /* = 'vmhd' */
  279.     VideoMediaInfoHeader            vmiHeader;
  280. };
  281. typedef struct VideoMediaInfoHeaderAtom VideoMediaInfoHeaderAtom;
  282.  
  283. struct VideoMediaInfo {
  284.     long                            size;                        /* size of Media info */
  285.     long                            atomType;                    /* = 'minf' */
  286.     VideoMediaInfoHeaderAtom        header;
  287.     HandlerAtom                        dataHandler;
  288.     DataInfoAtom                    dataInfo;
  289.     SampleTableAtom                    sampleTable;
  290. };
  291. typedef struct VideoMediaInfo VideoMediaInfo;
  292.  
  293. struct SoundMediaInfoHeader {
  294.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  295.     short                            balance;
  296.     short                            rsrvd;
  297. };
  298. typedef struct SoundMediaInfoHeader SoundMediaInfoHeader;
  299.  
  300. struct SoundMediaInfoHeaderAtom {
  301.     long                            size;                        /* size of Media info */
  302.     long                            atomType;                    /* = 'vmhd' */
  303.     SoundMediaInfoHeader            smiHeader;
  304. };
  305. typedef struct SoundMediaInfoHeaderAtom SoundMediaInfoHeaderAtom;
  306.  
  307. struct SoundMediaInfo {
  308.     long                            size;                        /* size of Media info */
  309.     long                            atomType;                    /* = 'minf' */
  310.     SoundMediaInfoHeaderAtom        header;
  311.     HandlerAtom                        dataHandler;
  312.     DataRefAtom                        dataReference;
  313.     SampleTableAtom                    sampleTable;
  314. };
  315. typedef struct SoundMediaInfo SoundMediaInfo;
  316.  
  317. /* whatever data the media handler needs goes after the atomType */
  318. struct MediaInfo {
  319.     long                            size;
  320.     long                            atomType;
  321. };
  322. typedef struct MediaInfo MediaInfo;
  323.  
  324. /***********************
  325. * Media Directory Structures
  326. ***********************/
  327. struct MediaHeader {
  328.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  329.     long                            creationTime;                /* seconds since Jan 1904 when directory was created */
  330.     long                            modificationTime;            /* seconds since Jan 1904 when directory was appended */
  331.     TimeValue                        timeScale;                    /* start time for Media (Media time) */
  332.     TimeValue                        duration;                    /* length of Media (Media time) */
  333.     short                            language;
  334.     short                            quality;
  335. };
  336. typedef struct MediaHeader MediaHeader;
  337.  
  338. struct MediaHeaderAtom {
  339.     long                            size;
  340.     long                            atomType;
  341.     MediaHeader                        header;
  342. };
  343. typedef struct MediaHeaderAtom MediaHeaderAtom;
  344.  
  345. struct MediaDirectory {
  346.     long                            size;
  347.     long                            atomType;                    /* = 'mdia' */
  348.     MediaHeaderAtom                    mediaHeader;                /* standard Media information */
  349.     HandlerAtom                        mediaHandler;
  350.     MediaInfo                        mediaInfo;
  351. };
  352. typedef struct MediaDirectory MediaDirectory;
  353.  
  354. /***********************
  355. * Track Structures
  356. ***********************/
  357.  
  358. enum {
  359.     TrackEnable                    = 1 << 0,
  360.     TrackInMovie                = 1 << 1,
  361.     TrackInPreview                = 1 << 2,
  362.     TrackInPoster                = 1 << 3
  363. };
  364.  
  365. struct TrackHeader {
  366.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  367.     long                            creationTime;                /* seconds since Jan 1904 when directory was created */
  368.     long                            modificationTime;            /* seconds since Jan 1904 when directory was appended */
  369.     long                            trackID;
  370.     long                            reserved1;
  371.     TimeValue                        duration;                    /* length of track (track time) */
  372.     long                            reserved2;
  373.     long                            reserved3;
  374.     short                            layer;
  375.     short                            alternateGroup;
  376.     short                            volume;
  377.     short                            reserved4;
  378.     MatrixRecord                    matrix;
  379.     Fixed                            trackWidth;
  380.     Fixed                            trackHeight;
  381. };
  382. typedef struct TrackHeader TrackHeader;
  383.  
  384. struct TrackHeaderAtom {
  385.     long                            size;                        /* size of track header */
  386.     long                            atomType;                    /* = 'tkhd' */
  387.     TrackHeader                        header;
  388. };
  389. typedef struct TrackHeaderAtom TrackHeaderAtom;
  390.  
  391. struct EditListType {
  392.     TimeValue                        trackDuration;
  393.     TimeValue                        mediaTime;
  394.     Fixed                            mediaRate;
  395. };
  396. typedef struct EditListType EditListType;
  397.  
  398. struct EditListAtom {
  399.     long                            size;
  400.     long                            atomType;                    /* = elst */
  401.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  402.     long                            numEntries;
  403.     EditListType                    editListTable[1];
  404. };
  405. typedef struct EditListAtom EditListAtom;
  406.  
  407. struct EditsAtom {
  408.     long                            size;
  409.     long                            atomType;                    /* = edts */
  410.     EditListAtom                    editList;
  411. };
  412. typedef struct EditsAtom EditsAtom;
  413.  
  414. struct TrackLoadSettings {
  415.     TimeValue                        preloadStartTime;
  416.     TimeValue                        preloadDuration;
  417.     long                            preloadFlags;
  418.     long                            defaultHints;
  419. };
  420. typedef struct TrackLoadSettings TrackLoadSettings;
  421.  
  422. struct TrackLoadSettingsAtom {
  423.     long                            size;
  424.     long                            atomType;                    /* = load */
  425.     TrackLoadSettings                settings;
  426. };
  427. typedef struct TrackLoadSettingsAtom TrackLoadSettingsAtom;
  428.  
  429. struct TrackDirectory {
  430.     long                            size;
  431.     long                            atomType;                    /* = 'trak' */
  432.     TrackHeaderAtom                    trackHeader;                /* standard track information */
  433.     ClippingAtom                    trackClip;
  434.     EditsAtom                        edits;
  435.     MediaDirectory                    media;
  436.     UserDataAtom                    userData;                    /* space for extending with new data types */
  437. };
  438. typedef struct TrackDirectory TrackDirectory;
  439.  
  440. /****************************************
  441. *
  442. *   MovieDirectory -
  443. *        The MovieDirectory is the top level structure which
  444. *        holds the TrackInstance describing where the
  445. *        TrackDirectories are.
  446. *
  447. ****************************************/
  448. struct MovieHeader {
  449.     long                            flags;                        /* 1 byte of version / 3 bytes of flags */
  450.     long                            creationTime;                /* seconds since Jan 1904 when directory was created */
  451.     long                            modificationTime;            /* seconds since Jan 1904 when directory was appended */
  452.     TimeValue                        timeScale;                    /* Time specifications */
  453.     TimeValue                        duration;
  454.     Fixed                            preferredRate;                /* rate at which to play this movie */
  455.     short                            preferredVolume;            /* volume to play movie at */
  456.     short                            reserved1;
  457.     long                            preferredLong1;
  458.     long                            preferredLong2;
  459.     MatrixRecord                    matrix;
  460.     TimeValue                        previewTime;                /* time in track the proxy begins (track time) */
  461.     TimeValue                        previewDuration;            /* how long the proxy lasts (track time) */
  462.     TimeValue                        posterTime;                    /* time in track the proxy begins (track time) */
  463.     TimeValue                        selectionTime;                /* time in track the proxy begins (track time) */
  464.     TimeValue                        selectionDuration;            /* time in track the proxy begins (track time) */
  465.     TimeValue                        currentTime;                /* time in track the proxy begins (track time) */
  466.     long                            nextTrackID;                /* next value to use for a TrackID */
  467. };
  468. typedef struct MovieHeader MovieHeader;
  469.  
  470. struct MovieHeaderAtom {
  471.     long                            size;
  472.     long                            atomType;                    /* = 'mvhd' */
  473.     MovieHeader                        header;
  474. };
  475. typedef struct MovieHeaderAtom MovieHeaderAtom;
  476.  
  477. struct MovieDirectory {
  478.     long                            size;
  479.     long                            atomType;                    /* = 'moov' */
  480.     MovieHeaderAtom                    header;
  481.     ClippingAtom                    movieClip;
  482. /* Track Directories */
  483.     struct {
  484.         TrackDirectory                    trackDirectory;            /* Track directory information */
  485.     }                                track[1];
  486. /* User data for Movie */
  487.     UserDataAtom                    userData;                    /* space for user extensions */
  488. };
  489. typedef struct MovieDirectory MovieDirectory;
  490.  
  491.  
  492. enum {
  493. /* some system defined format IDs */
  494.     MOVIE_TYPE                    = 'moov',
  495.     TRACK_TYPE                    = 'trak',
  496.     MEDIA_TYPE                    = 'mdia',
  497.     VIDEO_TYPE                    = 'vide',
  498.     SOUND_TYPE                    = 'soun'
  499. };
  500.  
  501. /* atom id's */
  502. enum {
  503.     MovieAID                    = 'moov',
  504.     MovieHeaderAID                = 'mvhd',
  505.     ClipAID                        = 'clip',
  506.     RgnClipAID                    = 'crgn',
  507.     MatteAID                    = 'matt',
  508.     MatteCompAID                = 'kmat',
  509.     TrackAID                    = 'trak',
  510.     UserDataAID                    = 'udta',
  511.     TrackHeaderAID                = 'tkhd',
  512.     EditsAID                    = 'edts',
  513.     EditListAID                    = 'elst',
  514.     MediaAID                    = 'mdia',
  515.     MediaHeaderAID                = 'mdhd',
  516.     MediaInfoAID                = 'minf',
  517.     VideoMediaInfoHeaderAID        = 'vmhd',
  518.     SoundMediaInfoHeaderAID        = 'smhd',
  519.     GenericMediaInfoHeaderAID    = 'gmhd',
  520.     GenericMediaInfoAID            = 'gmin',
  521.     DataInfoAID                    = 'dinf',
  522.     DataRefAID                    = 'dref',
  523.     SampleTableAID                = 'stbl',
  524.     STSampleDescAID                = 'stsd',
  525.     STTimeToSampAID                = 'stts',
  526.     STSyncSampleAID                = 'stss',
  527.     STSampleToChunkAID            = 'stsc',
  528.     STShadowSyncAID                = 'stsh',
  529.     HandlerAID                    = 'hdlr',
  530.     STSampleSizeAID                = 'stsz',
  531.     STChunkOffsetAID            = 'stco',
  532.     DataRefContainerAID            = 'drfc',
  533.     TrackReferenceAID            = 'tref',
  534.     ColorTableAID                = 'ctab',
  535.     LoadSettingsAID                = 'load',
  536.     CodeCollectionAID            = 'code',
  537.     InputMapAID                    = 'imap'
  538. };
  539.  
  540.  
  541. #ifdef __CFM68K__
  542. #pragma import off
  543. #endif
  544.  
  545. #if GENERATINGPOWERPC
  546. #pragma options align=reset
  547. #endif
  548.  
  549. #ifdef __cplusplus
  550. }
  551. #endif
  552.  
  553. #endif /* __MOVIESFORMAT__ */
  554.